home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperLib 1997 Winter - Disc 1
/
HYPERLIB-1997-Winter-CD1.ISO.7z
/
HYPERLIB-1997-Winter-CD1.ISO
/
オンラインウェア
/
PRG
/
NGL2.0.1J(68k).sit
/
NGL2.0.1J(68k)
/
Snow Demo
/
Snow Demo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-01
|
4KB
|
196 lines
/*============================================================
Snow デモプログラム
============================================================*/
#include "N_Library.h"
void Main_Process(void);
void Key_Process(void);
short Data_Rsrc = 0;
long routine_step = 0;
long wait;
short S1_X[1024];
short S1_Y[1024];
unsigned short S1_D[1024];
short S1_MX[1024];
short S1_MY[1024];
short r = 0,rs=0;
short speed = -4;
Boolean q = false;
Boolean kb=false;
EventRecord theEvent;
void main(void)
{
WindowPtr window;
short i;
ToolboxInit();
ColorCheck();
HideMenuBar();
HideCursor();
window = GetNewWindow (128,nil,(WindowPtr)-1L );
N_Window_Set(window,-(window->portBits.bounds.left),-(window->portBits.bounds.top),640,480);
SetPort((GrafPtr)window);
N_Sp_Make(640,480);
N_Cel_Make2(640,480);
Open_Resource_File(128,1,&Data_Rsrc);
// Set Kanban Sprites <Sprites & Cel> (Sprite 256)
Through_Col = 0xff; //透明部分を黒に変更
N_Sprite_Set(200,256,216,88,0,1,1,0); //木の看板を登録 (Sp 256)
// Set Snow Sprites (Sprite 30-46)
N_Sprite_Set(404,30,32,32,0,1,1,2); //雪のパターンの登録 (Sp 30-46)
N_Sprite_Set(419,46,8,8,0,1,1,0);
Through_Col = 0x00; //透明部分を白に変更
N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true); //背景は、スプライトオフスクリーンに書いておく
Close_Resource_File(&Data_Rsrc);
routine_step = 0;
for (i = 0;i!=1024;i++)
{
N_Cel_Kill(i); //プレーンを初期化
S1_X[i] = GetRandom(0,640*32)-640*16; //配列にランダムで雪の座標を入れておく
S1_Y[i] = GetRandom(0,480*32)-480*16;
S1_D[i] = GetRandom(1,255); //奥行き(大きいほど奥になる)
S1_MX[i] = GetRandom(0,30)-15;
S1_MY[i] = GetRandom(0,30)-15;
}
N_Pict_Effect (131,0,0,3,0,0);
for (i=0;i!=32;i++)
{
Delay(1,&wait);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
N_Pict_Effect (131,0,0,3,1,0);
}
do
{
Main_Process();
}
while (q==false);
FlushEvents( everyEvent, 0 );
ShowMenuBar();
ShowCursor();
ColorRevert();
}
void Main_Process(void)
{
short i,x,y,ii,p = 0,dist,bt;
long wrk;
long xx,yy;
unsigned long dum;
char key;
Boolean emp;
Point mp;
Key_Process();
routine_step++;
if (routine_step<64)
{
N_Cel_Put(1799,0x80000000+256,212,(short)(routine_step*4-92));
}
if (routine_step>=64 && routine_step<192)
{
N_Cel_Put(1799,0x80000000+256,212,164);
}
if (routine_step>=192 && routine_step <300)
{
N_Cel_Put(1799,0x80000000+256,212,(short)164+((routine_step-192)*5));
}
if (routine_step < 300) ii = routine_step;
else ii = 300;
for (i = 0;i!=ii;i++)
{
S1_X[i] += S1_MX[i]+GetRandom(0,10)-5;
if (S1_X[i]<-640*16)S1_X[i]=640*16;
if (S1_X[i]>640*16)S1_X[i]=-640*16;
S1_Y[i] += S1_MY[i]+GetRandom(0,10)-5;
if (S1_Y[i]<-640*16)S1_Y[i]=640*16;
if (S1_Y[i]>640*16)S1_Y[i]=-640*16;
x = S1_X[i];
y = S1_Y[i];
wrk = S1_D[i];
wrk = wrk / 16;
wrk = 16-wrk;
if (wrk>14) wrk = 15;
N_Cel_3D_Put(i,0x80000000+30+wrk,x,y,320,240,r,S1_D[i]); //雪の表示
dist = S1_D[i] + speed;
if (dist < 0) //雪が着地するパターンを書いて、新たに雪を作成
{
dist = 512+dist;
N_Cel_Get(i,&emp,&dum,&x,&y);
N_Sp_Put(0x80000000+46,x-4,y-4); //雪の着地パターンは背景に直接書いて重ねる
S1_X[i] = GetRandom(0,640*32)-640*16; //配列にランダムで雪の座標を入れておく
S1_Y[i] = GetRandom(0,480*32)-480*16;
}
if (dist > 255) //雪が着地するパターンを書いて、新たに雪を作成
{
dist = dist -256;
S1_X[i] = GetRandom(0,640*32)-640*16; //配列にランダムで雪の座標を入れておく
S1_Y[i] = GetRandom(0,480*32)-480*16;
}
S1_D[i] = dist;
}
r=r+rs;
N_Cel_Loop2(0,0); //セル表示のすべての処理をこれを呼ぶだけで完了する
}
void Key_Process(void)
{
char ky;
ky = N_Key_Get();
if (kb == false)
{
if ((ky & 0x01) !=0)
{
speed++;
kb = true;
}
if ((ky & 0x02) !=0)
{
rs--;
kb = true;
}
if ((ky & 0x04) !=0)
{
rs++;
kb = true;
}
if ((ky & 0x08) !=0)
{
speed--;
kb = true;
}
if ((ky & 0x40) !=0)
{
N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true); //背景を書き直す
kb = true;
}
}
if ((ky & 0x80) !=0)
{
q = true;
}
if (ky==0) kb = 0;
}